package com.ihr360.job.core.listener;

import javax.batch.api.chunk.listener.RetryReadListener;
import java.util.Iterator;
import java.util.List;

/**
 * <p>
 * Composite class holding {@link RetryReadListener}'s.
 * </p>
 *
 * @author Chris Schaefer
 * @since 3.0
 */
public class CompositeRetryReadListener implements RetryReadListener {
    private OrderedComposite<RetryReadListener> listeners = new OrderedComposite<RetryReadListener>();

    /**
     * <p>
     * Public setter for the {@link RetryReadListener}'s.
     * </p>
     *
     * @param listeners the {@link RetryReadListener}'s to set
     */
    public void setListeners(List<? extends RetryReadListener> listeners) {
        this.listeners.setItems(listeners);
    }

    /**
     * <p>
     * Register an additional {@link RetryReadListener}.
     * </p>
     *
     * @param listener the {@link RetryReadListener} to register
     */
    public void register(RetryReadListener listener) {
        listeners.add(listener);
    }

    @Override
    public void onRetryReadException(Exception ex) throws Exception {
        for (Iterator<RetryReadListener> iterator = listeners.reverse(); iterator.hasNext();) {
            RetryReadListener listener = iterator.next();
            listener.onRetryReadException(ex);
        }
    }
}
